package com.rpinfo.editalog.usuario.jtable;

import com.rpinfo.editalog.usuario.Usuario;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.ForeignKey;

/**
 * "Teste de alteração"
 *
 * @author camilo
 */
@Entity
@Table(name = UsuarioJTableDao.NAME_TABLE, uniqueConstraints
        = @UniqueConstraint(name = UsuarioJTableDao.NAME_UK_USUARIO_JTABLE,
                columnNames = {UsuarioJTableDao.NAME_COLUMN_JTABLE, UsuarioJTableDao.NAME_COLUMN_USUARIO}))
public class UsuarioJTable implements Serializable {

  public static final String ATTRIBUTE_ID = "id";
  public static final String ATTRIBUTE_JTABLE = "jTable";
  public static final String ATTRIBUTE_LARGURA_COLUNAS = "larguraColunas";
  public static final String ATTRIBUTE_POSICAO_COLUNAS = "posicaoColunas";
  public static final String ATTRIBUTE_USUARIO = "usuario";
  public static final String ATTRIBUTE_DATA_ALTERACAO="dataAlteracao";
  @Id
  @SequenceGenerator(name = UsuarioJTableDao.NAME_SEQUENCE, sequenceName = UsuarioJTableDao.NAME_SEQUENCE)
  @GeneratedValue(strategy = GenerationType.AUTO, generator = UsuarioJTableDao.NAME_SEQUENCE)
  private int id;
  @Column(name = UsuarioJTableDao.NAME_COLUMN_JTABLE, length = 50)
  private String jTable;
  @Column(name = UsuarioJTableDao.NAME_COLUMN_LARGURA_COLUNAS)
  private Integer[] larguraColunas;
  @Column(name = UsuarioJTableDao.NAME_COLUMN_POSICAO_COLUNAS)
  private Integer[] posicaoColunas;
  @ManyToOne
  @JoinColumn(name = UsuarioJTableDao.NAME_COLUMN_USUARIO, nullable = false)
  @ForeignKey(name = UsuarioJTableDao.NAME_FK_USUARIO)
  private Usuario usuario;
  @Temporal(TemporalType.TIMESTAMP)
  @Column(name = UsuarioJTableDao.NAME_COLUMN_DATA_ALTERACAO, insertable = false)
  private Date dataAlteracao;

  public Date getDataAlteracao() {
    return dataAlteracao;
  }

  public void setDataAlteracao(Date dataAlteracao) {
    this.dataAlteracao = dataAlteracao;
  }

  public Integer[] getLarguraColunas() {
    return larguraColunas;
  }

  public void setLarguraColunas(Integer[] larguraColunas) {
    this.larguraColunas = larguraColunas;
  }

  public Integer[] getPosicaoColunas() {
    return posicaoColunas;
  }

  public void setPosicaoColunas(Integer[] posicaoColunas) {
    this.posicaoColunas = posicaoColunas;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getjTable() {
    return jTable;
  }

  public void setjTable(String jTable) {
    this.jTable = jTable;
  }

  public Usuario getUsuario() {
    return usuario;
  }

  public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
  }

  @Override
  public int hashCode() {
    int hash = 3;
    hash = 23 * hash + this.id;
    hash = 23 * hash + Objects.hashCode(this.jTable);
    hash = 23 * hash + Arrays.deepHashCode(this.larguraColunas);
    hash = 23 * hash + Arrays.deepHashCode(this.posicaoColunas);
    hash = 23 * hash + Objects.hashCode(this.usuario);
    hash = 23 * hash + Objects.hashCode(this.dataAlteracao);
    return hash;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final UsuarioJTable other = (UsuarioJTable) obj;
    if (this.id != other.id) {
      return false;
    }
    if (!Objects.equals(this.jTable, other.jTable)) {
      return false;
    }
    if (!Arrays.deepEquals(this.larguraColunas, other.larguraColunas)) {
      return false;
    }
    if (!Arrays.deepEquals(this.posicaoColunas, other.posicaoColunas)) {
      return false;
    }
    if (!Objects.equals(this.usuario, other.usuario)) {
      return false;
    }
    return Objects.equals(this.dataAlteracao, other.dataAlteracao);
  }

}
